package com.ebupt.migu.music.schedule.controller;

import com.ebupt.migu.music.schedule.service.MessageNoticeTaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.ParseException;
import java.util.concurrent.ExecutionException;

/**
 * Created by Intellij IDEA. User: liuyangyang@cd.ebupt.com Date: 2020/3/21
 */
@Slf4j
@Component
@EnableScheduling
@RestController
@RequestMapping("/messageNoticeTask")
public class MessageNoticeTask {

    @Autowired
    private MessageNoticeTaskService messageNoticeTaskService;

    /**
     * 短信策略： 立即进行消息通知 每分钟执行一次定时任务
     */
    @Scheduled(initialDelay = 1000, fixedDelay = 1000 * 60)
    public void sendMessageNow() {
        log.info("消息通知策略【立即进行消息通知】定时任务启动");
        messageNoticeTaskService.sendMessageNow();
        log.info("消息通知策略【立即进行消息通知】定时任务结束");
    }

    /**
     * 短信策略： 定时进行消息通知 每五分钟执行一次定时任务
     */
    @Scheduled(initialDelay = 2000, fixedDelay = 1000 * 60)
    public void sendMessageOnce() {
        log.info("消息通知策略【单次进行消息通知】定时任务启动");
        messageNoticeTaskService.sendMessageOnce();
        log.info("消息通知策略【单次进行消息通知】定时任务结束");
    }

    /**
     * 短信策略： 策略周期内重复执行消息通知 每五分钟执行一次定时任务
     */
    @Scheduled(initialDelay = 3000, fixedDelay = 1000 * 60 * 5)
    public void sendMessageLoop() throws ParseException {
        log.info("消息通知策略【循环进行消息通知】定时任务启动");
        messageNoticeTaskService.sendMessageLoop();
        log.info("消息通知策略【循环进行消息通知】定时任务结束");
    }

    /**
     * 短信策略： 策略周期内间隔执行消息通知 每五分钟执行一次定时任务
     */
    @Scheduled(initialDelay = 5000, fixedDelay = 1000 * 60 * 5)
    public void sendMessageInterval() throws ParseException {
        log.info("消息通知策略【间隔进行消息通知】定时任务启动");
        messageNoticeTaskService.sendMessageInterval();
        log.info("消息通知策略【间隔进行消息通知】定时任务结束");
    }

    @PostMapping("/groupId")
    public long groupSize(String groupId) {
        return messageNoticeTaskService.groupSize(groupId);
    }

}
